package controle;

import java.util.Vector;

import negocio.Aluno;
import negocio.Curso;
import negocio.Disciplina;
import negocio.Pessoa;
import negocio.Professor;

import excecoes.*;


public class Fachada {
	private Controlador controle;
	private static Fachada fac;
	
	private Fachada(){
		controle = new Controlador();
	}
	
	public static Fachada obterInstancia(){
		if (fac==null){
			fac = new Fachada();
		}
		
		return fac;
		
	}

	public void alterarDisciplina(Disciplina d)
			throws DisciplinaNaoCadastradaException {
		controle.alterarDisciplina(d);
	}

	public void alterarPessoa(Pessoa p) throws PessoaNaoCadastradaException {
		controle.alterarPessoa(p);
	}

	public Disciplina consultaDisciplinaPorCodigo(int cod)
			throws DisciplinaNaoCadastradaException {
		return controle.consultaDisciplinaPorCodigo(cod);
	}

	public Vector<Disciplina> consultarDisciplinaPorNome(String nome) {
		return controle.consultarDisciplinaPorNome(nome);
	}

	public Pessoa consultarPessoaPorMatricula(int mat)
			throws PessoaNaoCadastradaException {
		try {
			return controle.consultarPessoaPorMatricula(mat);
		} catch (PessoaNaoCadastradaException e) {
			throw new PessoaNaoCadastradaException();
		}		
	}
	
	public Vector<Pessoa> consultarPessoaPorNome(String nome) {
		return controle.consultarPessoaPorNome(nome);
	}

	public void inserirDisciplina(Disciplina d)
			throws DisciplinaComMesmoNomeException {
		controle.inserirDisciplina(d);
	}

	public void inserirPessoa(Pessoa p) throws PessoaComMesmaMatriculaException, ErroSelecaoTipoPessoaException {
		controle.inserirPessoa(p);
	}

	public Vector<Professor> listarProfessores() {
		return controle.listarProfessores();
	}

	public Vector<Disciplina> PesquisarPorProfessor(Disciplina d) {
		return controle.PesquisarPorProfessor(d);
	}

	public void removerDisciplina(Disciplina d)
			throws DisciplinaNaoCadastradaException {
		controle.removerDisciplina(d);
	}

	public void removerPessoa(Pessoa p) throws PessoaNaoCadastradaException {
		controle.removerPessoa(p);
	}

	public boolean consultarPessoa(Pessoa p) {
		return controle.consultarPessoa(p);
	}

	public Vector<Aluno> listarAlunos() {
		return controle.listarAlunos();
	}

	public Vector<Pessoa> listarPessoas(String sql) {
		return controle.listarPessoas(sql);
	}

	public void alterarCurso(Curso c) throws CursoNaoCadastradoException {
		controle.alterarCurso(c);
	}
	
	public Curso consultarCursoPorcodigo(int cod) throws CursoNaoCadastradoException{
		try{
			return controle.consultarCursoPorCodigo(cod);
		}
		catch (CursoNaoCadastradoException e) {
			throw new CursoNaoCadastradoException();
		}
	}

	public void deletarCurso(Curso c) {
		controle.deletarCurso(c);
	}

	public void inserirCurso(Curso c) {
		controle.inserirCurso(c);
	}

	public Vector<Curso> listarCurso() {
		return controle.listarCurso();
	}
	
	
}
